#include<bits/stdc++.h>
using namespace std;
char buf[(1<<21)+5],*p1,*p2;
int n,m,p,sum=0;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
int read(){
	int f=0,x=0;
	char ch=getchar();
	while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
	return f?-x:x;
}
const int mod=147744151;
int a[1001][1001],f[101][1001][1001];
inline int ksm(int x,int y) {
	int ans=1;
	while(y) {
		if(y&1) ans=(1ll*ans*x)%p;
		x=(1ll*x*x)%p;
		y>>=1;
	}
	return ans;
}
int main() {
	freopen("tsuki.in","r",stdin);
	freopen("tsuki.out","w",stdout);
	n=read(),m=read(),p=read();
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++) {
			a[i][j]=read();
			if(p<=100) f[a[i][j]][i][j]=1;
			else f[1][i][j]=a[i][j];
		} 
	} 
	int q;
	q=read();
	if(n+m<=400) {
		for(int ljh=1;ljh<=q;ljh++) {
			int x1,y1,x2,y2,ans=1;
			x1=read(),y1=read(),x2=read(),y2=read();
			for(int i=x1;i<=x2;i++) {
				for(int j=y1;j<=y2;j++) {
					ans=(1ll*ans*a[i][j])%p;
				}
			}
			sum=(sum+(ljh^ans)%mod)%mod;
		}
		printf("%d",sum);
	} else if(p<=100){
		for(int k=1;k<=p;k++) {
			for(int i=1;i<=n;i++) {
				for(int j=2;j<=m;j++) {
					f[k][i][j]+=f[k][i][j-1];
				}
			}
		}
		for(int k=1;k<=p;k++) {
			for(int j=1;j<=m;j++) {
				for(int i=2;i<=n;i++) {
					f[k][i][j]+=f[k][i-1][j];
				}
			}
		}
		for(int ljh=1;ljh<=q;ljh++) {
			int x1,x2,y1,y2,ans=1;
			x1=read(),y1=read(),x2=read(),y2=read();
			for(int i=1;i<=p;i++) {
				int cnt=0;
				cnt=(cnt+f[i][x2][y2]-f[i][x2][y1-1]);
				cnt=(cnt-(f[i][x1-1][y2]-f[i][x1-1][y1-1]));
				ans=(1ll*ans*ksm(i,cnt))%p;
			}
			sum=(sum+(ans^ljh))%mod;
		}
		printf("%d",sum);
	} else {
		for(int i=0;i<=n;i++) {
			for(int j=0;j<=m;j++) {
				if(!f[1][i][j]) f[1][i][j]=1;
			}
		}
		for(int i=1;i<=n;i++) {
			for(int j=2;j<=m;j++) {
				f[1][i][j]=(1ll*f[1][i][j]*f[1][i][j-1])%p;
			}
		}
		for(int j=1;j<=m;j++) {
			for(int i=2;i<=n;i++) {
				f[1][i][j]=(1ll*f[1][i][j]*f[1][i-1][j])%p;
			}
		}
		for(int ljh=1;ljh<=q;ljh++) {
			int x1,x2,y1,y2,ans=1;
			x1=read(),y1=read(),x2=read(),y2=read();
			int cnt=f[1][x2][y2];
			cnt=(1ll*cnt*ksm(f[1][x2][y1-1],p-2)%p)%p;
			cnt=(1ll*cnt*ksm(1ll*f[1][x1-1][y2]*ksm(f[1][x1-1][y1-1],p-2)%p,p-2)%p)%p;
			sum=((sum+1ll*(cnt^ljh)%mod))%mod;
		}
		printf("%d",sum);
	}
	return 0; 
} 

/*
5 5 998244353
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1
1 1 5 5

*/
